package com.linhai.scm.service.impl;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import com.linhai.general.Page;
import com.linhai.scm.dao.IBaseDao;
import com.linhai.scm.service.IBaseService;

public abstract class BaseService<T> implements IBaseService<T> {
//public class BaseService<T> implements IBaseService<T> {
	
	@Autowired
	private IBaseDao<T> entityDao;
	/**
	 * 增加数据
	 * @param entity 要插入的数据实体
	 * @return 插入后生成的主键
	 */
	public Serializable insert(T entity){
		if(null==entity){
			return null;
		}
		return entityDao.insert(entity);
	}
	
	/**
	 * 删除数据
	 * @param id 要删除的数据实体ID
	 */
    public void delete(Serializable id){
    	if(null==id){
    		return;
    	}
    	entityDao.delete(id);
    }
    
    /**
     * 批量删除
     * @param ids
     */
    public void delete(List<Serializable> ids){
    	if(null==ids || 0==ids.size()){
    		return;
    	}
    	entityDao.delete(ids);
    }
    
    /**
     * 更新数据
     * @param entity 要更新的数据实体
     */
    public void update(T entity){
    	if(null==entity){
    		return;
    	}
    	entityDao.update(entity);
    }
    
	/**
	 * 根据 主键ID 获取实体
	 * @param id 主键
	 * @return 实体
	 */
	public T get(Serializable id){
		if(null==id){
			return null;
		}
		return entityDao.get(id);
	}
	
	/**
	 * 根据查询条件 获取实体
	 * @param values 需要查询的条件
	 * @return 实体
	 */
	public T get(Map<String,Object> values) {
		if(null==values){
			return null;
		}
		return entityDao.get(values);
	}
	
	/**
	 * 根据 主键ID 获取实体
	 * @param id 主键
	 * @return 实体
	 */
	public T load(Serializable id){
		if(null==id){
			return null;
		}
		return entityDao.load(id);
	}
	
	/**
	 * 获取所有数据集合
	 * @return 所有数据集合
	 */
	public List<T> loadAll(){
		return entityDao.loadAll();
	}
	
	/**
	 * 获取所有数据集合
	 * @return 所有数据集合
	 */
	public List<T> getList(){
		return entityDao.getList(null);
	}
	
	/**
	 * 获取符合条件的数据集合
	 * @return 数据集合
	 */
	public List<T> getList(Map<String,Object> values){
		return entityDao.getList(values);
	}
	
	/**
	 * 获取记录条数
	 * @param hql 需要查询的hql语句
	 * @param values 要查询的条件
	 * @return 返回记录条数
	 */
	public int getCount(Map<String,Object> values){
		return entityDao.getCount(values);
	}
	
	/**
	 * 使用hql 语句进行分页查询操作
	 * @param curPage 当前页码
	 * @param pageSize 每页需要显示的记录数
	 * @param values 要查询的条件
	 * @return 当前页的所有记录
	 */
	public List<T> findByPage(final Page page,Map<String,Object> values){
		return entityDao.findByPage(page, values);
	}
}
